package cn.tedu.antcolony.market.dao.persist.repository;


import cn.tedu.antcolony.market.pojo.entity.Clue;
import cn.tedu.antcolony.market.pojo.vo.ClueListItemVO;
import cn.tedu.antcolony.market.pojo.vo.ClueStandardVO;
import cn.tedu.antcolonycommons.pojo.vo.PageData;
import org.apache.ibatis.annotations.Param;

import java.util.List;


/**
 * 处理线索数据的存储库接口
 *
 * @author java@tedu.cn
 * @version 0.0.1
 */
public interface IClueRepository {

    /**
     * 插入线索数据
     *
     * @param clue 线索数据
     * @return 受影响的行数
     */
    int insert(Clue clue);

    /**
     * 批量插入线索数据
     *
     * @param clueList 线索列表
     * @return 受影响的行数
     */
    int insertBatch(List<Clue> clueList);

    /**
     * 根据id删除线索数据
     *
     * @param id 线索ID
     * @return 受影响的行数
     */
    int deleteById(Long id);

    /**
     * 根据若干个id批量删除线索数据
     *
     * @param idList 若干个线索ID的数组
     * @return 受影响的行数
     */
    int deleteByIds(List<String> idList);

    /**
     * 根据id修改线索数据
     *
     * @param clue 封装了线索id和新数据的对象
     * @return 受影响的行数
     */
    int update(Clue clue);

    /**
     * 统计线索数据的数量
     *
     * @return 线索数据的数量
     */
    int count();

    /**
     * 根据线索手机号统计数据的数量
     *
     * @param phone 线索手机
     * @return 匹配手机号的线索数据的数量
     */
    int countByPhone(String phone);

    /**
     * 统计非某id但名称匹配的线索数据的数量，用于检查是否存在其它数据使用了相同的名称
     *
     * @param id   线索ID
     * @param name 线索名称
     * @return 匹配名称但不匹配ID的数据的数量
     */
    int countByNameAndNotId(@Param("id") Long id, @Param("name") String name);

    /**
     * 根据id查询线索数据详情
     *
     * @param id 线索ID
     * @return 匹配的线索数据详情，如果没有匹配的数据，则返回null
     */
    ClueStandardVO getStandardByClueId(Long id);

    /**
     * 根据id查询公海数据详情
     *
     * @param id 公海ID
     * @return 匹配的公海数据详情，如果没有匹配的数据，则返回null
     */
    ClueStandardVO getStandardByCustomerSeaId(Long id);


    /**
     * 查询线索数据列表
     *
     * @param pageNum  页码
     * @param pageSize 每页记录数
     * @return 线索数据列表
     */
    PageData<ClueListItemVO> listClue(Integer pageNum, Integer pageSize);

    /**
     * 查询公海数据列表
     *
     * @param pageNum  页码
     * @param pageSize 每页记录数
     * @return 公海数据列表
     */
    PageData<ClueListItemVO> listCustomerSea(Integer pageNum, Integer pageSize);

    //查线索和公海
    PageData<ClueListItemVO> list(Integer pageNum, Integer pageSize);


    /**
     * @描述 线索转公海
     * @参数 id 线索id
     * @创建时间 2023/6/15
     */
    int transformToSeaById(Long id);

    /**
     * @描述 领取公海
     * @参数 id 公海id
     * @创建时间 2023/6/15
     */
    int transformToClueById(Long id);

    /*修改归属人*/
    int changeAttribution(Long id, String name);

    /*根据id删除归属人*/
    int deleteAttribution(Long id);

}
